\chapter*{Зачем?}
 

Итак, почему вообще возникла необходимость
   использования внешних движков визуализации в Maya? Возьму на
   себя смелость и выскажу основную мысль этой главы на её второй
   странице, не углубляясь в дебри объяснений и дискуссий –
   стандартный Maya software renderer непригоден для использования в сколько-нибудь серьёзном
   проекте, в особенности – кинопроекте. Не могу поверить, что я это
   сказал и – нет, это гораздо хуже, чем я предполагал – я написал это
   в книжке про Maya. Посмотрите
   кто-нибудь в окно – там небо в Дунай ненароком не упало?
 

Сказав А, скажем и Б - впрочем, рендерить чайники с
   помощью майского рендерера – можно, если их не очень
   много.
 

Теперь, когда разгорячённые толпы Maya-поклонников уже занялись моими поисками, попробуем понять,
   что же стало причиной такого провала в функциональности, в общем,
   очень высококачественного и продуманного продукта. Для начала,
   обратимся к первоисточникам, а именно к документу под названием “Design and Implementation of the Maya Renderer”, в котором
   описываются основные идеи, положенные в основу Maya software renderer. В
   качестве опорных концепций, ставших краеугольными камнями дизайна
   этого рендерера, выделены следующие вещи:
 


\begin{enumerate}
\item Стандартный рендерер Maya должен быть лучше, чем его предшественники – рендереры от TDI, Alias и Wavefront. В то же время, на начальных стадиях разработки нового
рендерера вместо него использовалось проверенное старое решение – Alias Renderer – которое затем по мере разработки заменялось готовыми частями нового рендерера.

\item Стандартный рендерер должен быть максимально удобным в использовании и предоставлять пользователю максимум возможностей для настройки и доступа к
“внутренностям”. Поскольку в качестве системы представления внутренних данных в Maya выбран DAG (прямой незамкнутый граф)– стандартный рендерер также должен быть
привязан к этой системе, предоставлять для неё свои собственные ноды для настройки самого процесса рендеринга и использовать ноды от HyperShade для настройки свойств
материалов.

\item Качество изображения должно быть высоким и предсказуемым.

\item Должно быть сделано всё возможное, чтобы ускорить рендеринг.

\item Поскольку рендерер является встроенным в Maya, в большинстве случаев он будет выполняться одновременно со своим материнским приложением, что означает
необходимость для рендерера быть гибким и нетребовательным по отношению к объёму необходимой для работы памяти (просто потому, что память нужна и самой Maya).

\item Новый рендерер должен быть по возможности универсальным и допускать расширение в будущем без необходимости полного переписывания.
 
\end{enumerate}


Что же в результате получилось у авторов Maya software renderer? Опять
   таки, не углубляясь в ненужные детали, укажем основные особенности
   готового продукта:

\begin{itemize}

\item      Стандартный рендерер Maya является
   адаптивным иерархическим сканлайн-рендерером с возможностью
   использования рейтрейсинга. Модные и потихоньку начинающие
   использоваться в продакшне Global Illumination, Final Gathering, Ambient Occlusion Mapping – не
   реализованы. Данный рендерер является триангулирующим. В процессе
   подготовки к рендерингу сцена бьётся на части, каждая из которых
   оценивается по количеству входящих в эту часть треугольников –
   таким образом, рендерер пытается не выйти за обозначенные ему рамки
   доступной памяти.
 

\item     Несмотря на объявленную гибкость –
   рендерер невозможно расширить за счёт собственноручно написанных
   плагинов. Всё, что можно сделать – реализовать собственные
   генераторы геометрии и дописать свои материалы для HyperShade – доступ к другим возможностям рендерера, не говоря уже о
   замене модулей или встраивании в его собственной пайплайн - не
   обеспечивается.
 

Впрочем, это была мелкая неприятность (ведь многие
   современные рендереры не позволяют даже такой гибкости). А вот
   дальше начинаются неприятности покрупнее.
 

\item      Для получения сколько-нибудь гладкой
   поверхности на любых поверхностях – кроме полигонов – этому
   рендереру требуется достичь очень высокого уровня тесселяции
   (разбиения на полигоны), что сказывается на общей
   производительности рендерера. Попросту говоря, любая попытка
   получить сколько-нибудь качественную картинку с
   использованием NURBS или Subdivision Surfaces обречена на долгое ожидание результата.
 

\item      Для получения теней рендерер использует
   по умолчанию технологию shadow mapping (хотя, как
   мы указывали ранее, существует возможность включения рейтрейсинга).
   Так вот, как показывает опыт, эти самые карты теней в Maya имеют ограничение по размеру не более 3200 по каждой стороне.
   Превышение данного ограничения приводит теоретически – к серьёзному
   замедлению рендеринга, а на практике – почти всегда роняет рендерер
   и вместе с ним – саму Maya. Такое
   поведение не позволяет получить сколько-нибудь качественные тени
   для кино, high definition video и вообще любых изображений высокого разрешения – например, для
   рекламных плакатов – при помощи shadow maps .
 

\item      Стандартный рендерер Maya отвратительно
   работает с большим количеством объектов и с большими разрешениями
   (больше 2048x2048). Причём,
   если при попытке отрендерить кадр в большом разрешении мы получим
   просто некоторое нелинейное замедление рендеринга (я мог бы
   сказать, что данное замедление является экспоненциальным, но, к
   собственному стыду, у меня не хватило терпения проверить эту
   гипотезу на практике и дождаться окончания рендеринга тестовых
   сцен), то при большом количестве объектов мы рискуем просто
   обвалить процесс.
 
\end{itemize}

Следует отметить, что разработчики Maya приложили максимум усилий для того, чтобы максимально улучшить
   свой рендерер и хоть как-то адаптировать его для условий реального
   продакшна. Однако возникает такое впечатление, что успех Bingo и других анимационных проектов, сделанных при помощи
   исключительно встроенного движка, настолько повлиял на умы
   программистов в Alias, что вместо
   того, чтобы действительно заняться оптимизацией своего детища, они
   пошли на поводу у собственного менеджмента и начали вводить в него
   новые возможности (впрочем, они поступили ещё хуже – начали писать
   новые рендереры). Таким образом, в Maya появились PaintFX renderer, vector renderer, volume renderer и другие
   приятные – не скрою – расширения стандартного рендерера – но это не
   исправило ситуации с основным движком и привело к тому, что (я
   пригнулся и прикрыл голову руками) им просто перестали пользоваться
   для сколько-либо серьёзных задач. В конце концов, это увидели и
   сами создатели Maya и смирились
   со своим поражением, встроив в программу в качестве стандартной
   опции Mental Ray. У
   них это получилось не так ловко, как у разработчиков из Softimage (что неудивительно, если вспомнить, сколько лет MR поставляется в качестве рендерера для Softimage и XSI), однако, тем
   не менее, уже сейчас в стандартной поставке Maya вы имеете
   хороший и стабильный продакшн рендерер.
 

Тем не менее, даже после встраивания MR в Maya вопрос с использованием внешних рендереров все еще
   не закрыт. Отчасти потому, что несмотря на растущую популярность и
   громкие пресс-релизы, Mental Ray пока не
   является таким же стандартом для студий, который представляет из
   себя Renderman. Ну и,
   конечно же, потому, что очень многие студии используют для
   рендеринга свои собственные наработки – достаточно вспомнить Blue Sky Studios со своим
   рейтрейсером CGI Production Studio или PDI/Dreamworks с
   внутренним рендерером (никогда не угадаете!) PDI Renderer, уж не
   говоря про многочисленные японские и французские студии,
   традиционно использующие для просчёта картинок собственные
   наработки.
 

Так или иначе, интерфейс к внешним рендерерам в
   Maya был всегда – собственно, было бы очень удивительно, если бы в
   продукте с такой продуманной архитектурой  его не было. Другой вопрос – что
   из себя этот интерфейс представляет.
 

Прежде чем продолжить свой рассказ, я хотел бы
   разрешить небольшую неоднозначность в определении и переводе
   терминов, чтобы не запутать вас и не запутаться самому. Итак, у нас
   есть 2 различных “интерфейса” – тот, что называется просто interface, и тот, который обычно принято обозначать как Visual Interface или GUI. Так вот, под
   первым мы будем понимать те параметры, функции, процедуры и
   объектные сущности, которые предоставляет разработчику плагинов
   или Mel-описателю Maya; под вторым –
   те окна, меню, кнопочки и прочие {\it интерфейсные элементы},
   которые Maya отрисовывает.
 

Так вот, несмотря на всю гибкость и всю
   направленность на реальные запросы студий интерфейса {\it внутреннего}, позволяющего встроить
   функциональность вызова внешнего рендерера в Maya, интерфейс {\it визуальный} до недавнего
   времени до установленной планки не дотягивал. У вас, несомненно,
   была возможность написать свой плагин, встроить его в Maya,
   создать для него окно настроек с помошью Mel, даже
   встроиться в главное меню программы – но вплоть до 5ой
   версии Maya у вас не было возможности встраиваться в святая
   святых рендеринга, окно Render Globals.
   Запрашивать значения переменных из этого окна было можно, а
   встроиться в него – нельзя (для любителей теории
   конспирации  - эту
   досадную мелочь исправили одновременно со встраиванием Mental Ray).
 

Отметим же торжество справедливости над косностью
   ума и реализуем возможность вставить в текст первую в этой главе
   картинку:
 
\gr{image001}

Вы уже заметили такие страшные слова, как “плагин”
   и “объектная сущность”, которые я употребил, описывая внутренние
   интерфейсы Maya. Более
   подробно про внутреннее устройство вы прочитаете в других главах,
   сейчас же мы вкратце рассмотрим сам процесс  работы Maya со внешними
   рендерерами.
